package com.youxin.exception.code;


/**
 * 全局错误码 10000-15000
 * <p>
 * 预警异常编码    范围： 30000~34999
 * 标准服务异常编码 范围：35000~39999
 * 邮件服务异常编码 范围：40000~44999
 * 短信服务异常编码 范围：45000~49999
 * 权限服务异常编码 范围：50000-59999
 * 文件服务异常编码 范围：60000~64999
 * 日志服务异常编码 范围：65000~69999
 * 消息服务异常编码 范围：70000~74999
 * 开发者平台异常编码 范围：75000~79999
 * 搜索服务异常编码 范围：80000-84999
 * 共享交换异常编码 范围：85000-89999
 * 移动终端平台 异常码 范围：90000-94999
 * <p>
 * 安全保障平台    范围：        95000-99999
 * 软硬件平台 异常编码 范围：    100000-104999
 * 运维服务平台 异常编码 范围：  105000-109999
 * 统一监管平台异常 编码 范围：  110000-114999
 * 认证方面的异常编码  范围：115000-115999
 *
 * @author zuihou
 * @createTime 2017-12-13 16:22
 */
public enum ExceptionCode implements BaseExceptionCode {

    //系统相关 start
    SUCCESS("000000", "成功"),
    SYSTEM_BUSY("000001", "系统繁忙~请稍后再试~"),
    SYSTEM_TIMEOUT("000002", "系统维护中~请稍后再试~"),
    PARAM_EX("000003", "参数类型解析异常"),
    SQL_EX("000004", "运行SQL出现异常"),
    NULL_POINT_EX("000005", "空指针异常"),
    ILLEGALA_ARGUMENT_EX("000006", "无效参数异常"),
    MEDIA_TYPE_EX("000007", "请求类型异常"),
    LOAD_RESOURCES_ERROR("000008", "加载资源出错"),
    BASE_VALID_PARAM("000009", "统一验证参数异常"),
    OPERATION_EX("000010", "操作异常"),


    OK("000000", "OK"),
    BAD_REQUEST("000400", "错误的请求"),
    /**
     * {@code 401 Unauthorized}.
     *
     * @see <a href="http://tools.ietf.org/html/rfc7235#section-3.1">HTTP/1.1: Authentication, section 3.1</a>
     */
    UNAUTHORIZED("000401", "未经授权"),
    /**
     * {@code 404 Not Found}.
     *
     * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.4">HTTP/1.1: Semantics and Content, section 6.5.4</a>
     */
    NOT_FOUND("000404", "没有找到资源"),
    METHOD_NOT_ALLOWED("000405", "不支持当前请求类型"),

    TOO_MANY_REQUESTS("000429", "请求超过次数限制"),
    INTERNAL_SERVER_ERROR("000500", "内部服务错误"),
    BAD_GATEWAY("000502", "网关错误"),
    GATEWAY_TIMEOUT("000504", "网关超时"),
    //系统相关 end

    REQUIRED_FILE_PARAM_EX("1001", "请求中必须至少包含一个有效文件"),
    //jwt token 相关 start

    JWT_TOKEN_EXPIRED("40001", "会话超时，请重新登录"),
    JWT_SIGNATURE("40002", "不合法的token，请认真比对 token 的签名"),
    JWT_ILLEGAL_ARGUMENT("40003", "缺少token参数"),
    JWT_GEN_TOKEN_FAIL("40004", "生成token失败"),
    JWT_PARSER_TOKEN_FAIL("40005", "解析token失败"),
    JWT_USER_INVALID("40006", "用户名或密码错误"),
    JWT_USER_ENABLED("40007", "用户已经被禁用！"),
    //jwt token 相关 end

    ;

    private String code;
    private String msg;

    ExceptionCode(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        return msg;
    }


    public ExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    public ExceptionCode param(Object... param) {
        msg = String.format(msg, param);
        return this;
    }
}
